CUB |
您所在的位置:网站首页 › ucsd 清华 › CUB |
2021/2/5 更新
极力推荐的方式 https://github.com/wvinzh/WS_DAN_PyTorch 2020/7/19 更新 CUB-200-2011的下载:https://www.vision.caltech.edu/datasets/cub_200_2011/ 网站有时进不去,可以通过百度云下载。 百度云链接:链接: https://pan.baidu.com/s/1o60hA0qrupDjtMGPVCke3A 密码: u0sr 如果只跑分类,下载第一个就行了。里面除了类别标签也有标注框。如果还想用到分割的话,可以下载Segmentations。 我只下了红框内的压缩包 方法一:使用scipy.misc、PIL和numpy结合处理 方法一代码是参考NTS-Net的,哈哈哈哈!!!原作者写的非常瓦利鼓的!!! import numpy as np # 读取数据 import scipy.misc import os from PIL import Image from torchvision import transforms import torch class CUB(): def __init__(self, root, is_train=True, data_len=None,transform=None, target_transform=None): self.root = root self.is_train = is_train self.transform = transform self.target_transform = target_transform img_txt_file = open(os.path.join(self.root, 'images.txt')) label_txt_file = open(os.path.join(self.root, 'image_class_labels.txt')) train_val_file = open(os.path.join(self.root, 'train_test_split.txt')) # 图片索引 img_name_list = [] for line in img_txt_file: # 最后一个字符为换行符 img_name_list.append(line[:-1].split(' ')[-1]) # 标签索引,每个对应的标签减1,标签值从0开始 label_list = [] for line in label_txt_file: label_list.append(int(line[:-1].split(' ')[-1]) - 1) # 设置训练集和测试集 train_test_list = [] for line in train_val_file: train_test_list.append(int(line[:-1].split(' ')[-1])) # zip压缩合并,将数据与标签(训练集还是测试集)对应压缩 # zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组, # 然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。 # 我们可以使用 list() 转换来输出列表 # 如果 i 为 1,那么设为训练集 # 1为训练集,0为测试集 # zip压缩合并,将数据与标签(训练集还是测试集)对应压缩 # 如果 i 为 1,那么设为训练集 train_file_list = [x for i, x in zip(train_test_list, img_name_list) if i] test_file_list = [x for i, x in zip(train_test_list, img_name_list) if not i] train_label_list = [x for i, x in zip(train_test_list, label_list) if i][:data_len] test_label_list = [x for i, x in zip(train_test_list, label_list) if not i][:data_len] if self.is_train: # scipy.misc.imread 图片读取出来为array类型,即numpy类型 self.train_img = [scipy.misc.imread(os.path.join(self.root, 'images', train_file)) for train_file in train_file_list[:data_len]] # 读取训练集标签 self.train_label = train_label_list if not self.is_train: self.test_img = [scipy.misc.imread(os.path.join(self.root, 'images', test_file)) for test_file in test_file_list[:data_len]] self.test_label = test_label_list # 数据增强 def __getitem__(self,index): # 训练集 if self.is_train: img, target = self.train_img[index], self.train_label[index] # 测试集 else: img, target = self.test_img[index], self.test_label[index] if len(img.shape) == 2: # 灰度图像转为三通道 img = np.stack([img]*3,2) # 转为 RGB 类型 img = Image.fromarray(img,mode='RGB') if self.transform is not None: img = self.transform(img) if self.target_transform is not None: target = self.target_transform(target) return img, target def __len__(self): if self.is_train: return len(self.train_label) else: return len(self.test_label) if __name__ == '__main__': ''' dataset = CUB(root='./CUB_200_2011') for data in dataset: print(data[0].size(),data[1]) ''' # 以pytorch中DataLoader的方式读取数据集 transform_train = transforms.Compose([ transforms.Resize((224, 224)), transforms.RandomCrop(224, padding=4), transforms.RandomHorizontalFlip(), transforms.ToTensor(), transforms.Normalize([0.485,0.456,0.406], [0.229,0.224,0.225]), ]) dataset = CUB(root='./CUB_200_2011', is_train=False, transform=transform_train,) print(len(dataset)) trainloader = torch.utils.data.DataLoader(dataset, batch_size=2, shuffle=True, num_workers=0, drop_last=True) print(len(trainloader)) ''' trainset: 5994 trainloader 374 testset: 5794 testloader 363 '''但是有一个致命缺陷:耗时太长:145.11554789543152 s 读数据耗时两分半,这谁顶的住? |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |